package lpca.controllers 
{
	import flashx.textLayout.edit.ModelEdit;
	import kioschool.basic.view.View;
	import kioschool.controller.ISecondaryController;
	import lpca.model.LpcaModel;
	import lpca.utils.MazeGenerator.*;
	import lpca.utils.IMaze;
	import lpca.utils.Wave;
	import lpca.view.ViewMaze;
	import kioschool.model.AbstractStep;
	import kioschool.view.IStepView;
	import lpca.steps.*;
	import lpca.view.ViewStep;
	import kioschool.controller.PrimaryController;
	import lpca.utils.Point
	/**
	 * ...
	 * @author ...
	 */
	public class SecondaryController implements ISecondaryController
	{
		//параметры используются только в данном классе
		public static const width: int = 20;
		public static const height: int = 20;
		public static const complexity: int = 50;
		public static const initializeStep: int = 1;
		
		public var view: ViewMaze;	
		public var model: LpcaModel;
		public var controller: LpcaController;
		private static var _instance: SecondaryController;
			
		/**
		 * Оповещение о смене режима
		 */ 						 
		public function regimeChanged(regime:int): void
		{			
			trace("System Step: смена режима. режим:" + regime);																														
		}
			
		/**
		 * Получает первый шаг
		 */ 
		public function get firstStep(): AbstractStep
		{						
			trace("Start Application. Get first step");
			return new WaveByStep(initializeStep);			
		}
		
		/**
		 * Получает сообщение-приветствие
		 */ 
		public function get greeting():String 
		{
			return "Найдите минимальный путь до сундука, используя волновой алгоритм";
		}	
				
		/**
		 * обновление отображения шага
		 * @param	step
		 * @return IStepView
		 */
		public function getStepView(): IStepView
		{						
			return new ViewStep(this.view);
		}
		
		public static function get instance(): SecondaryController
		{
			if (_instance == null) 			
				_instance = new SecondaryController(new PrivateClass());									
			return _instance;
		}
		
		/**
		 * Инициализация - выполняется при перезапуске алгоритма
		 * Выполняется генерация данных, установка первого шага и т.д.
		 */ 			
		public  function init():void 
		{
			this.model = new LpcaModel(width, height, complexity);																					
			this.controller = new LpcaController(this.model);
			this.view = new ViewMaze(this.model, this.controller);			
		}
		
		public function SecondaryController(privateClass: PrivateClass) 
		{						
		}			
	}	
	
}

class PrivateClass
{
		function PrivateClass()
		{
			
		}
}



